﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using TCC.DB.DA;
using TCC.DTO;
using TCC.Common;


namespace TCC
{
    public partial class Generic : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            if (Request.QueryString["gen"] == null)
                ListaTudo();
            else
                ListarPorGenero(Utils.Conversores.ConverteTextoParaInteiro(Request.QueryString["gen"].ToString()));
        }

        private void ListaTudo()
        {
            var mp = (MasterPage.MPage)this.Master;

            var daFilme = new DaFilme();

            var ListaFilmes = mp.Usuario == null ? daFilme.ListarTodos() : daFilme.ListarTodosPorPreferenciaUsuario(mp.Usuario.Id);

            gvListaDeFilmes.DataSource = daFilme.GerarListaDistribuida(ListaFilmes);
            gvListaDeFilmes.DataBind();
        }

        private void ListarPorGenero(int idGenero)
        {
            var daFilme = new DaFilme();

            var ListaFilmes = daFilme.ListarTodos().Where(f => f.Genero.Id == idGenero).ToList();

            gvListaDeFilmes.DataSource = daFilme.GerarListaDistribuida(ListaFilmes);
            gvListaDeFilmes.DataBind();
        }

        private void ExibirDetalhe(int idFilme)
        {
            var daFilme = new DaFilme();

            daFilme.AddHit(idFilme);

            var filme = daFilme.ListarUm(idFilme);

            lblDescFilme.Text = filme.Sinopse;
            lblDiretor.Text = filme.Diretor;
            lblHits.Text = filme.Hits.ToString();
            lblNomeFilme.Text = filme.Nome;
        }

        protected void gvListaDeFilmes_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowIndex != -1)
            {
                using (LinkButton lbFilme = (LinkButton)e.Row.Cells[0].FindControl("lbFilme"))
                {
                    var filme = (DtoFilme)e.Row.DataItem;

                    lbFilme.CommandArgument = filme.Id.ToString();
                    lbFilme.CommandName = "ExibirDetalhe";
                    lbFilme.Text = filme.Nome;
                }
            }
        }

        /*Esse método aqui é ativado quando o nome do filme é clicado na lista, faz a chamada dos outros métodos, 
         *que tomam todas as ações quando o usuário clica para acessar informações de qualquer filme*/
        protected void gvListaDeFilmes_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "ExibirDetalhe")
            {
                ExibirDetalhe(Utils.Conversores.ConverteTextoParaInteiro(e.CommandArgument.ToString()));
            }
        }
    }
}